﻿using System;
using System.Collections.Generic;
using SportTraining.Core.Domain;
using SportTraining.Core.Services;

namespace SportTraining.MVVM.Model
{
    /// <summary>
    /// контракт Бизнес - логики для цикла создания платежа за абонемент
    /// </summary>
    public interface IPaymentProcedureModel : IBaseModel
    {
        /// <summary>
        /// Сохранение платежа в БД, печать чека
        /// </summary>
        /// <param name="payment"></param>
        void SavePayment(IPayment payment);

        /// <summary>
        /// Получить список доступных секций
        /// </summary>
        IList<ISection> GetEnableSections();

        /// <summary>
        ///  распечатать  чек для платежа
        /// </summary>
        /// <param name="payment"></param>
        void PrintPayment(IPayment payment);

        /// <summary>
        ///  Создание нового пустого платежа
        /// </summary>
        /// <param name="section">секция</param>
        /// <returns>платёж</returns>
        IPayment CreatePayment(ISection section);

        /// <summary>
        /// Начать процесс получения денег
        /// </summary>
        void StartWaitMoney();

        /// <summary>
        /// Остановить процесс получения денег
        /// </summary>
        void StopWaitMoney();

        /// <summary>
        ///  Событие получение денежки
        /// </summary>
        event EventHandler<BillAcceptorEventArgs> ReceiveMoneyEvent;

        /// <summary>
        /// Ошибка в терминальном утстройстве
        /// </summary>
        event EventHandler<TerminalDeviceErrorEventArgs> ErrorEvent;
    }
}
